import { PiniaPluginContext } from "pinia";

const noPersistedstates = ['other']

// 持久状态
export default function persistedstate(context: PiniaPluginContext) {
    //插件方法 有几个模块就执行几次
    const currentState = JSON.parse(localStorage.getItem(context.store.$id) || "{}")
    if(Object.keys(currentState).length){
        // 如果有数据才更新
        context.store.$patch(currentState)
    }
    // 监听每个仓库 如果仓库改变 就调用该函数
    context.store.$subscribe((storeContext, state) => {
        if(!noPersistedstates.includes(storeContext.storeId)){
            /**
                *每次state发生变化的时候
                *都把它保存在localStorage里面
                *两个参数
                *第一个是当前修改store的上下文
                *第二个是当前修改的状态
            **/
            localStorage.setItem(storeContext.storeId, JSON.stringify(state))
        }
    }, {
        detached: true
    })
}